{{tag>precise trusty serveur sécurité tutoriel}}

----

====== Comment créer un certificat SSL ? ======




===== Pré-requis =====

Le paquet ''openssl'' doit être installé par la commande :

<code>
sudo apt-get install openssl
</code>


===== Marche à suivre =====

==== Clef privée du serveur ====

Placez-vous dans le répertoire ''/etc/ssl'' et créez la clé :
<code>
cd /etc/ssl
sudo openssl genrsa -out server.key 2048
</code>

Cette commande va créer la clé privée avec l'algorithme RSA 2048 bits.

==== Demande de signature du certificat ====

Ensuite il faut générer un fichier de « demande de signature de certificat », en anglais CSR : Certificate Signing Request  :

<code>
sudo openssl req -new -key server.key -out server.csr
</code>

Vous allez devoir répondre à un certain nombre de questions. Veillez surtout à mettre le nom du serveur tel qu'il est appelé de l'extérieur dans le champ « Common Name » (par exemple : "www.example.com").

Optionnel : pour visualiser le contenu du fichier généré :
<code>
openssl req -text -noout -in server.csr
</code>
==== Signature du certificat ====


Enfin, générez ou récupérez le certificat signé au format x509 suivant la méthode 1 ou 2 :
  - certificat auto-signé pour 365 jours (1 an) :<code>
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
</code>//Remarque : ce certificat n'est authentifié par aucune autorité, vous aurez donc un message d'avertissement quand vous vous connectez au serveur. //
  - certificat signé par une autorité tierce, par exemple :
    * [[https://www.cacert.org|CACert]] : copier/coller la demande (le fichier server.csr) à l'autorité qui va signer le certificat à utiliser ([[https://www.cacert.org/account.php?id=10|ici pour cacert]]).
    * [[https://letsencrypt.org/|Let's Encrypt]], avec l'option --csr du client letsencrypt (CSR au format DER : option // -outform der// pour openssl)

===== Usage avancé =====

==== Usage non interactif ====

Pour éviter de répondre aux questions de la localisation jusqu'au domaine, il est possible de passer l'argument subject à la commande openssl. Ajouter le paramètre : //-subj "/OU=Domain Control Validated/CN=exemple.fr"//

<note help>//Domain Control Validated// indique simplement que seule la vérification du domaine est effectuée. Ce paramètre peut être omis. Il existe une vérification DV (celle indiquée) et EV, plus complète. Plus de détails sur [[https://certsimple.com/blog/are-ev-ssl-certificates-worth-it|ce blog]] (en).</note>

==== Paramétrage fin de la CSR ====

Les CSR permettent de valider plusieurs domaines avec un même certificat. Pour l'utiliser, créer un fichier //openssl_SAN.cnf// comme-suit :
<file>
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment

[SAN]
subjectAltName=DNS:exemple.fr,DNS:www.exemple.fr
</file>

Et ajouter les paramètres suivants à la commande openssl : //-config openssl_SAN.cnf -reqexts SAN//

===== Voir aussi =====

  * **(fr)** [[http://www.magdiblog.fr/divers/creer-une-passerelle-securisee-avec-un-raspberry-pi/|Qu'est ce qu'un certificat, comment créer une CA ainsi qu'un exemple d'authentification par certificat client]]
  * **(en)** [[https://www.tty1.net/blog/2015/using-letsencrypt-in-manual-mode_en.html|Utilisation détaillée avec Let's Encrypt]]

----

// Contributeur 5: [[utilisateurs:Jeremy]] //
